package com.xiaoshangkou.hellopra.controller.backstage;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xiaoshangkou.hellopra.bean.PermissionWithStatus;
import com.xiaoshangkou.hellopra.pojo.Role;
import com.xiaoshangkou.hellopra.service.RoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import java.util.List;

@Controller
@RequestMapping("/backstage/role")
public class RoleController {
    @Autowired
    private RoleService roleService;

    /**
     * 用途：进入角色页面时分页查询所有角色
     * @RequestParam :设置默认值
     * page:当前页的页码（current）
     * size:每页显示的条数（size）
     */
    @RequestMapping("/all")
    public ModelAndView all(@RequestParam(defaultValue = "1") int page,
                            @RequestParam(defaultValue = "6")int size){
        ModelAndView modelAndView=new ModelAndView();
        Page<Role> rolePage = roleService.findPage(page, size);
        modelAndView.addObject("rolePage",rolePage);
        modelAndView.setViewName("/backstage/role_all");
        return modelAndView;

    }

    /**
     * 用途：添加新的角色
     * role :前端传来的角色对象
     * 待更新：后期前端页面通过json数据实现局部更新
     */
    @RequestMapping("/add")
    @ResponseBody//不会跳转页面,返回字符串（json数据）
    public String add(Role role){
        roleService.add(role);
        return "添加成功";
    }

    /**
     * 用途：删除角色
     * @param rid 前端传来的要删除角色的rid
     * @return
     */
    @RequestMapping("/delete")
    public String delete(Integer rid){
        roleService.delete(rid);
        return "redirect:/backstage/role/all";
    }

    /**
     *用途：在修改管理员之前，先将原来的数据返回到前端
     *rid:角色的rid
     */
    @RequestMapping("/edit")
    @ResponseBody//不会跳转页面,返回字符串（json数据）
    public Role edit(Integer rid){
        return roleService.findById(rid);
    }

    /**
     * 用途：修改角色
     * admin :前端传来的角色对象
     * 待更新：后期前端页面通过json数据实现局部更新
     */
    @RequestMapping("/update")
    @ResponseBody
    public String update(Role role){
        roleService.update(role);
        return "修改成功";
    }

    /**
     * 用途:角色点击分配权限时，跳转到分配页显示所有权限
     * 用户拥有的角色，默认打上勾
     * @param rid 角色aid
     * rid传入role_permission是为了分配完权限后，提交到后端，后端知道是谁
     */
    @RequestMapping("/findPermission")
    public ModelAndView findPermission(Integer rid){

        ModelAndView modelAndView=new ModelAndView();
        List<PermissionWithStatus> permissions = roleService.findPermission(rid);
        modelAndView.addObject("permissions",permissions);
        modelAndView.addObject("rid",rid);
        modelAndView.setViewName("/backstage/role_permission");
        return modelAndView;
    }


    /**
     * 用途：角色重新分配权限
     * @param ids 为角色添加的权限
     * @param rid 需要分配权限的角色
     * @return
     */
    @RequestMapping("/updatePermission")
    public String updatePermission(Integer[] ids,Integer rid){
        roleService.updatePermissioon(ids,rid);
        return "redirect:/backstage/userGroup/all";
    }






}
